/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2009，所有权利保留。
 * 
 * 项目名：	rumba-web
 * 文件名：	RHotItemRendererFactory.java
 * 模块说明：	
 * 修改历史：
 * Sep 15, 2009 - lxm - 创建。
 */
package com.hd123.rumba.gwt.widget2.client.grid.renderer;

import com.google.gwt.user.client.ui.Widget;
import com.hd123.rumba.gwt.widget2.client.grid.RGrid;
import com.hd123.rumba.gwt.widget2.client.grid.RGridColumnDef;
import com.hd123.rumba.gwt.widget2.client.menu.RPopupMenu;

/**
 * RHotItem表格渲染器工厂
 * 
 * @author lxm
 * 
 */
public class RHotItemRendererFactory implements RCellRendererFactory {

  /**
   * 创建对象实例。
   * 
   * @param menu
   *            指定所对应的弹出式菜单，对于纯字符串列，可以不必设置此属性。
   */
  public RHotItemRendererFactory(RPopupMenu menu) {
    this(menu, null);
  }

  /**
   * 创建对象实例。
   * 
   * @param menu
   *            指定所对应的弹出式菜单。
   * @param renderFactory
   *            指定渲染器工厂。
   */
  public RHotItemRendererFactory(RPopupMenu menu, RCellRendererFactory renderFactory) {
    this.menu = menu;
    this.rendererFactory = renderFactory;
  }

  private RCellRendererFactory rendererFactory;
  private RPopupMenu menu;

  public RCellRenderer makeRenderer(RGrid grid, RGridColumnDef colDef, int row, int col) {
    RHotItemRenderer renderer = new RHotItemRenderer(row, col);
    renderer.setMenu(menu);
    
    if (rendererFactory != null) {
      renderer.setWidget((Widget) rendererFactory.makeRenderer(grid, colDef, row, col));
    } else {
      Object data = grid.getProvider().getData(grid.toDataRow(row), colDef.getIndex());
      renderer.setValue(data);
    }
    return renderer;
  }

  /**
   * 取得渲染器工厂
   * 
   * @return
   */
  public RCellRendererFactory getRendererFactory() {
    return rendererFactory;
  }

  /**
   * 设置渲染器工厂，调用表格的rebuild()后生效<br>
   * 对于纯字符串列，可以不必设置此属性，RGrid会用从provider取得字符串数据直接填充单元格，这样性能较好。
   * 
   * @param rendererFactory
   */
  public void setRendererFactory(RCellRendererFactory rendererFactory) {
    this.rendererFactory = rendererFactory;
  }

  /**
   * 被绑定的弹出是菜单。
   * 
   * @return
   */
  public RPopupMenu getMenu() {
    return menu;
  }

  /**
   * 设置被绑定的弹出式菜单。
   * 
   * @param menu
   */
  public void setMenu(RPopupMenu menu) {
    this.menu = menu;
  }

}
